package br.com.commercy.dominio.entidade;

import java.io.Serializable;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

import org.hibernate.annotations.IndexColumn;

import br.com.commercy.infra.arquitetura.entidade.Entidade;

@SuppressWarnings("serial")
@Entity
@Table(name="TBL_ESTOQUE")
@SequenceGenerator(name="SEQ_ESTOQUE", sequenceName="SEQ_ESTOQUE")
public class Estoque implements Entidade,Serializable {
	
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO, generator="SEQ_ESTOQUE")
	private Long codigo;
	
	@Column(name="ESTOQUE_MAX")
	private Long estoqueMax;
	
	@Column(name="LOTE_MIM")
	private Float loteMin;
	
	@Column(name="ESTOQUE_MIM")
	private Long estoqueMin;
	
	@Column(name="PRAZO_ENTREGA")
	private Integer prazoEntrega;
	
	@Column(name="PRAZO_AQUISIACAO")
	private Integer prazoAquisicao;
	
	@ManyToOne(fetch= FetchType.LAZY, cascade = CascadeType.ALL)
	@JoinColumn(name="produto",unique=true)
	private Produto produto;
	

	@Override
	public Serializable getIdentificador() {
		// TODO Auto-generated method stub
		return codigo;
	}

	@Override
	public String getDescricao() {
		// TODO Auto-generated method stub
		return null;
	}

	public Long getCodigo() {
		return codigo;
	}

	public void setCodigo(Long codigo) {
		this.codigo = codigo;
	}

	public Long getEstoqueMax() {
		return estoqueMax;
	}

	public void setEstoqueMax(Long estoqueMax) {
		this.estoqueMax = estoqueMax;
	}

	public Float getLoteMin() {
		return loteMin;
	}

	public void setLoteMin(Float loteMin) {
		this.loteMin = loteMin;
	}

	public Long getEstoqueMin() {
		return estoqueMin;
	}

	public void setEstoqueMin(Long estoqueMin) {
		this.estoqueMin = estoqueMin;
	}

	public Integer getPrazoEntrega() {
		return prazoEntrega;
	}

	public void setPrazoEntrega(Integer prazoEntrega) {
		this.prazoEntrega = prazoEntrega;
	}

	public Integer getPrazoAquisicao() {
		return prazoAquisicao;
	}

	public void setPrazoAquisicao(Integer prazoAquisicao) {
		this.prazoAquisicao = prazoAquisicao;
	}

	public Produto getProduto() {
		return produto;
	}

	public void setProduto(Produto produto) {
		this.produto = produto;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((codigo == null) ? 0 : codigo.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Estoque other = (Estoque) obj;
		if (codigo == null) {
			if (other.codigo != null)
				return false;
		} else if (!codigo.equals(other.codigo))
			return false;
		return true;
	}
	
	
	

}
